package tasks

import (
	"cm2/exception"
	"fmt"
)

// Task 用于描述指导单步操作的标记和参数
type Task struct {
	Serial string
	SId    string
	Code   string
	Name   string
	Params map[string]interface{}
}

// Taskprovider Task任务执行
type Taskprovider interface {
	InnerTask() *Task
	Execute(task *Task) (interface{}, string, *exception.Exception)
}

// SIdPrefix 统一 task sid 的前缀
func SIdPrefix(sid string) string {
	return fmt.Sprintf("__TASK_%s", sid)
}

// DefaultTasks 默认task provider 集合
func DefaultTasks() map[string]Taskprovider {
	m := make(map[string]Taskprovider)

	var tpkg Taskprovider

	// 下载器
	tpkg = NewDownloader()
	m[tpkg.InnerTask().SId] = tpkg
	// 解压缩zip
	tpkg = NewUnzip()
	m[tpkg.InnerTask().SId] = tpkg

	return m
}
